Skip to content

chore: move package publishing to GitHub Packages with latest/beta/test channels#60

Closed
raupp wants to merge 2 commits intodevelopfrom
feat/github-packages-release-channels
Closed

chore: move package publishing to GitHub Packages with latest/beta/test channels#60
raupp wants to merge 2 commits intodevelopfrom
feat/github-packages-release-channels

Conversation

@raupp
Copy link
Contributor

@raupp raupp commented Mar 14, 2026

Contexto

Esta PR recria o fluxo de publicação do pacote para usar o GitHub Packages em vez do npm público como registry principal.

A ideia central é permitir que o time consiga publicar e validar versões de teste do pacote sem encostar no canal de produção (latest). Com isso, o desenvolvedor pode instalar uma versão candidata diretamente em outra aplicação, validar comportamento real de integração e só depois promover uma versão estável para produção.

Os canais agora ficam separados por contexto:

  • master publica em latest
  • develop publica em beta
  • Pull Requests com label deployToTest publicam em test

O que foi feito

Publicação no GitHub Packages

  • removidos os workflows antigos de publicação apontando para o npm público
  • criado um workflow único para publicação em https://npm.pkg.github.com
  • configurado publishConfig.registry no package.json
  • mantido o uso de GITHUB_TOKEN para publicação no GitHub Actions

Canais de release por branch e PR

  • master publica com a tag latest
  • develop publica com a tag beta
  • Pull Request publica com a tag test somente quando possuir o label deployToTest

Proteção do canal estável

O objetivo principal desta PR é garantir que um dev consiga testar o pacote em ambiente real sem quebrar o latest.

Para isso:

  • o canal latest continua reservado exclusivamente para produção
  • testes de integração via PR passam a usar o canal test
  • builds contínuos da branch develop vão para beta
  • publicações de latest só acontecem com a versão explícita do package.json
  • se a mesma versão estável já existir, o workflow não republca nem sobrescreve a release

Esse desenho evita que validações temporárias contaminem o consumo padrão do pacote em produção.

Versionamento seguro para canais temporários

Para evitar colisão de versões no registry:

  • latest usa exatamente a versão definida no package.json
  • beta recebe sufixo automático de build
  • test recebe sufixo com número da PR e execução do workflow

Exemplos:

  • 0.2.8 em latest
  • 0.2.8-beta.145.1 em beta
  • 0.2.8-pr.87.145.1 em test

Como isso passa a funcionar

Produção

  1. Incrementa-se a versão no package.json
  2. Faz-se merge para master
  3. O workflow publica a versão em latest

Desenvolvimento contínuo

  1. Faz-se push ou merge em develop
  2. O workflow publica uma nova versão no canal beta

Teste isolado de pacote via PR

  1. Abre-se uma PR com origem no próprio repositório
  2. Adiciona-se o label deployToTest
  3. O workflow publica uma versão no canal test
  4. O dev instala essa versão em outro projeto para validar o pacote sem tocar no latest

Se for necessário publicar novamente para a mesma PR, basta:

  • fazer novo push na PR, ou
  • remover e adicionar novamente o label deployToTest

Como o dev testa sem quebrar o latest

O fluxo foi desenhado exatamente para este cenário.

Em vez de promover tudo cedo demais para produção, o dev pode:

  1. abrir uma PR com a alteração do pacote
  2. aplicar o label deployToTest
  3. aguardar a publicação da tag test
  4. instalar @ozmap/logger@test no projeto consumidor
  5. validar comportamento, API, tipagem e integração real
  6. só depois promover a mudança para develop ou master

Com isso, o canal latest continua limpo, previsível e reservado para consumo estável.

Documentação adicionada

O README foi atualizado com:

  • explicação dos canais latest, beta e test
  • regra do label deployToTest
  • instruções para gerar novos deploys
  • instruções para instalação nas máquinas dos devs
  • passo a passo para testar localmente via npm pack
  • observação sobre autenticação no GitHub Packages

Importante sobre pacote público

Embora o repositório seja open source e o pacote possa ficar público no GitHub Packages, a instalação via npm continua exigindo autenticação no registry do GitHub.

Por isso a documentação foi atualizada para orientar o uso de ~/.npmrc com um PAT classic contendo pelo menos read:packages.

Como testar esta PR

Validar workflow

  • abrir a PR
  • adicionar o label deployToTest
  • confirmar que o workflow publica no canal test
  • remover o label e confirmar que não há nova publicação sem o label

Validar consumo do pacote

Configurar ~/.npmrc:

@ozmap:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=SEU_GITHUB_PAT_CLASSIC

Instalar a versão de teste:

npm install @ozmap/logger@test

Verificar dist-tags:

npm view @ozmap/logger dist-tags --registry=https://npm.pkg.github.com

Validar pacote local sem publicar

pnpm install
pnpm build
npm pack

Riscos e observações

  • PRs vindas de fork não publicam pacote por segurança
  • latest depende de version bump explícito no package.json
  • o primeiro publish no GitHub Packages pode exigir ajuste manual de visibilidade do package
  • instalação de pacote público no GitHub Packages ainda exige autenticação

Resultado esperado

Depois desta PR:

  • o time consegue validar mudanças do pacote em projetos consumidores sem afetar produção
  • latest fica protegido como canal estável
  • develop continua servindo como trilha de entrega contínua com beta
  • PRs podem gerar pacotes efêmeros controlados para teste real de integração

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates package publishing from the public npm registry to GitHub Packages and introduces branch/PR-based release channels (latest, beta, test) to allow safe integration testing without impacting production consumers.

Changes:

  • Add publishConfig.registry to publish @ozmap/logger to https://npm.pkg.github.com.
  • Replace legacy npm publish workflows with a single GitHub Packages workflow that publishes latest/beta/test depending on branch or PR label.
  • Update README with GitHub Packages authentication, install instructions, and channel/publishing documentation.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
package.json Configures publishing to GitHub Packages via publishConfig.registry.
README.md Documents GitHub Packages auth setup and the new latest/beta/test publishing channels.
.github/workflows/publish-github-packages.yml Adds unified publish workflow with branch/PR label-based channel logic and stable-version dedupe.
.github/workflows/npm-publish.yml Removes old npmjs publish workflow.
.github/workflows/npm-publish-2.yml Removes old beta publish workflow targeting npmjs.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +5 to +8
branches:
- master
- develop
- development
Comment on lines +198 to +202
| Origem | Tag npm | Objetivo |
|--------|---------|----------|
| `master` | `latest` | Release de produção |
| `develop` | `beta` | Release contínua de desenvolvimento |
| Pull Request com label `deployToTest` | `test` | Release efêmera para validação |
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if npm view @ozmap/logger@"${{ steps.publish_meta.outputs.package_version }}" version --registry=https://npm.pkg.github.com >/dev/null 2>&1; then
@raupp
Copy link
Contributor Author

raupp commented Mar 14, 2026

Atualizei a PR para endereçar os pontos levantados no review:

  • removi o suporte extra a development no workflow para manter o canal beta alinhado apenas com develop
  • removi o hardcode do nome do pacote no npm view, passando a ler isso do package.json
  • corrigi a inconsistência da suíte de testes sobre timer duplicado, que era o motivo da falha no check de CI

Validação local executada nesta branch:

  • pnpm test
  • parse do workflow YAML

Agora a PR está rerodando os checks no commit mais recente.

@raupp
Copy link
Contributor Author

raupp commented Mar 15, 2026

desnecessario migrar o pacote publico para o github

@raupp raupp closed this Mar 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants